﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<stdbool.h>
#include<locale.h>

/*
* 关于Win32API的介绍
* 
* 
**/


void SetPos(int x, int y)
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

	//根据句柄设置光标位置
	COORD pos = { x,y };
	SetConsoleCursorPosition(handle, pos);
}

//设置控制台属性
int main1()
{
	printf("hehe\n");
	system("title LianBao");//设置名称
	system("mode con cols=50 lines=20");//设置控制台的窗口大小,行/列
	system("pause");//程序暂停
	return 0;
}

int main2()
{
	//COORD是Windows API定义的结构体,表示一个字符在控制台屏幕缓冲区的坐标
	//COORD;
	//类型声明:
	//typedef struct _COORD {
	//	SHORT X;//横坐标
	//	SHORT Y;//纵坐标
	//} COORD, * PCOORD;
	COORD pos = { 10,10 };

	return 0;
}

int main3()
{
	//GetStdHandle函数:用于从一个特定的设备获取句柄(句柄是一个值,表示不同的设备,可以识别设备,通过句柄可以控制程序)
	//GetStdHandle函数原型
	//HANDLE GetStdHandle(DWORD nStdHandle);
	/* 参数
	STD_INPUT_HANDLE 标准输入句柄
	STD_OUTPUT_HANDLE 标准输出句柄
	STD_ERROR_HANDLE 标准错误句柄
	*/
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//获取输出设备句柄
	return 0;
}

int main4()
{
	//获取光标信息
	//BOOL WINAPI GetConsoleCursorInfo(HANDLE hConsoleOutput, PCONSOLE_CURSOR_INFO lpConsoleCursorInfo);//参数2:控制光标信息的指针
	
	//CONSOLE_CURSOR_INFO结构体原型(光标信息):
	//typedef struct _CONSOLE_CURSOR_INFO {
	//	DWORD dwSize;
	//	BOOL bVisible;
	//} CONSOLE_CURSOR_INFO, * PCONSOLE_CURSOR_INFO;

	//dwSize，由光标填充的字符单元格的百分⽐.此值介于1到100之间。光标外观会变化，范围从完全填充单元格到单元底部的⽔平线条
	//bVisible，光标的可⻅性。如果光标可⻅，则此成员为TRUE

	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄

	CONSOLE_CURSOR_INFO cursor_info = { 0 };//控制光标信息的结构体CONSOLE_CURSOR_INFO

	GetConsoleCursorInfo(handle, &cursor_info);//获取光标信息
	
	cursor_info.bVisible = false;//隐藏光标
	//cursor_info.dwSize = 100;
	SetConsoleCursorInfo(handle, &cursor_info);//修改之后需要设置光标信息

	system("pause");
	return 0;
}


int main5()
{
	//获得设备句柄
	//HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

	////根据句柄设置光标位置
	//COORD pos = { 10,10 };
	//SetConsoleCursorPosition(handle, pos);//设置光标坐标的函数
	
	//封装成函数
	//setpos(10, 5);
	//printf("hehe");
	//setpos(12, 5);
	printf("haha\n");
	return 0;
}



#define CheckPress(vKey) ((GetAsyncKeyState(vKey)&0x1) ? 1:0)
int main6()
{
	//获取按键情况,
	//short GetAsyncKeyState(int vKey);//参数是虚拟键值,返回short类型;返回值最低位是1表示该按键被按过,是0表示没按过
	 
	//检测一个键是否被按过->写成一个宏
	while (1)
	{
		if (CheckPress(0x30))
		{
			printf("1\n");
		}
		else if(CheckPress(0x31))
		{
			printf("2\n");
		}
	}
	
	return 0;
}

void PrintLove()
{
	int i = 0;
	while (i<=10)
	{
		SetPos(10, i);
		wprintf(L"%lc", L'★');
		i += 1;
	}
	SetPos(12,0);
	int j = 0;
	while (j <= 10)
	{
		wprintf(L"%lc", L'★');
		j += 1;
	}
	SetPos(15, 15);

}

int main()
{
	//setlocale函数,修改当前地区
	//char* setlocale(int category, const char* Locale);
	//参数2:"C"表示C语言默认模式, ""本地模式
	
	setlocale(LC_ALL,"");
	//locale.h本地化


	//PrintLove();

	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			wprintf(L"%lc", L'★');
		}

		printf("\n");
	}

	return 0;
}